package cmd

import (
    "errors"
    "fmt"
    "os"
    "strings"

    "gitee.com/exi-red/maketools/util"
    "github.com/spf13/cobra"
)

const (
    // Rd 子命令
    Rd = "rd"

    // RdDesc 描述
    RdDesc = "删除指定目录"
)

// RdFlags rd 子命令参数结构
type RdFlags struct {
    Dir Params // 指定目录
}

// RdFlag rd 子命令参数
var RdFlag = RdFlags{
    Dir: Params{
        Name:      "dir",
        Shorthand: "d",
        Value:     "",
        Usage:     "目录路径（支持多个），半角逗号分隔",
    },
}

// 注册子命令
var rdCmd = &cobra.Command{
    Use:   Rd,
    Short: RdDesc,
    Long:  util.CLIHeader(40, RdDesc),
    Example: strings.NewReplacer(
        "{ROOTNAME}", ROOTNAME,
        "{rd}", Rd,
        "{Dir}", RdFlag.Dir.Name,
    ).Replace(
        `  {ROOTNAME} {rd} ^ 
    --{Dir} "./dir,./dir2,..."`,
    ),
    Run: func(cmd *cobra.Command, args []string) {
        // 处理器执行
        err := rdHandler(cmd)
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
    },
}

// 初始化
func init() {
    // 禁用自动排序
    rdCmd.Flags().SortFlags = false

    // 解析参数
    StringP(rdCmd, RdFlag.Dir)

    // 自定义帮助信息
    BoolP(rdCmd, "help", "h", false, "显示 rd 命令的帮助")
}

// 删除目录处理器
func rdHandler(cmd *cobra.Command) error {
    flags := cmd.Flags()

    // 获取参数
    dir, _ := flags.GetString(RdFlag.Dir.Name)
    if dir == "" {
        return errors.New("directory not specified")
    }

    dirs := strings.Split(dir, ",")
    for _, dir := range dirs {
        dir = strings.TrimSpace(dir)
        dir = util.WorkDirPath(dir)
        if dir != "" {
            fileInfo, err := os.Stat(dir)
            if os.IsNotExist(err) {
                continue // 路径不存在
            }
            if !fileInfo.IsDir() {
                continue // 不是目录
            }
            err = os.RemoveAll(dir)
            if err != nil {
                return err
            }
        }
    }
    return nil
}
